
// executionContextObj = {
//     variableObject: {
//         num: undefined,
//         fn:
//     }, //

// }

// function foo() {
//     console.log(this);
//     var num = 10
//     function fn() {
//         console.log(num);
//     }
//     fn()
//     console.log(num);

// }

// foo()

// 执行上下文主要注意创建（解释）阶段，
//在创建阶段，我们最主要又要注意变量对象(variable object:VO),
//VO中记录的该环境所有生命的变量、函数、参数
//1.确定所有的形参以及特殊值arguments
//2.确定函数中var声明的变量，将他们的值赋值为undefined，
// 如果VO当中已经存在该名称，则直接乎略
// 3.确定函数中通过自面量声明的函数，将他们的值指向函数对象，
//如果VO中已经存在该名称，则覆盖

// {
//     a: undefined,
//         foo: func
// }
// a = 10;
// console.log(a);
// var a;

// var foo = 200;
// function foo() {

// }
// {
//     a
//     b:function
// }

// function test1(a, b) {
//     console.log(a, b);//1 [Function: b]
//     var b = 123;
//     console.log(a, b);//1 123
//     function b() {
//         var c = 123;
//     }
// }
// test1(1, 2)

// var g1 = 123;
// var a = 2;
// {
//     a:1
//     b: function b
// }
// function test2(a, b) {
//     console.log(a, b, g1);//1 funcb   456
//     var b = 123;
//     function b() { }
//     var a = function () {
//         console.log(a, b);//func a 123
//     }
//     a()
// }
// var g1 = 456;
// test2(1, 2);

// var foo = 1;
// function bar() {
//     console.log(foo);//undefined
//     if (!foo) {
//         var foo = 10;
//     }
//     console.log(foo);//10
// }
// bar()

// var a = 1;
// function b() {
//     console.log(a);//func a
//     a = 10;
//     return;
//     function a() { }
// }
// b()
// console.log(a);//1

// console.log(foo);//func(C)
// var foo = 'A';
// console.log(foo);//A
// var foo = function () {
//     console.log('B');
// }
// console.log(foo);//func(B)
// foo()//B
// function foo() {
//     console.log('C');
// }
// console.log(foo);//func(B)
// foo()//B
